package com.cskaoyan.javase.array._2momery;

/**
 * 定义两个数组：
 * 静态初始化一个数组，输出数组名，元素取值，长度
 * 然后声明第二个数组，把第一个数组的地址赋值给第二个数组。
 * 输出第二个数组的数组名，元素取值，长度
 * 然后给第二个数组赋值，再次输出两个数组的名及元素
 *
 *
 * 多个引用指向同一个对象
 * 使用任何一个引用去访问修改对象中元素的取值
 * 其它引用再去访问都会访问到这个修改。
 *
 * 改变对象的状态：修改对象中元素（属性）的取值
 *
 * new关键字一定在堆上创建一个新的独立的对象
 *
 * @since 11:33
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo5 {
    public static void main(String[] args) {
        int[] arr = {1, 2, 3};
        int[] arr2;
        arr2 = arr;
        /*
            arr和arr2这两个引用
            是同一个对象由两个引用指向了
            相当于一个人有大名 有小名都是同一个人
         */
        System.out.println(arr);
        System.out.println(arr2);

        arr[0] = 666;
        System.out.println(arr2[0]);

        // new关键字一定会创建一个新的独立的对象
        double[] arr3 = new double[3];
        int[] arr4 = new int[3];


        /*
             "=="连接引用数据类型变量，肯定是连接引用
             比较的是引用当中存储的堆上对象的地址
             而且要注意
             必须是相同数据类型的引用数据类型
             才能够用引用连接

             当双等号连接两个引用
             只有当两个引用完全指向同一个对象时
             才会返回true
             说白了双等号是判断自己和自己相等返回true
             其余情况都会返回false
         */
        System.out.println(arr == arr2);

        // System.out.println(arr == arr3);
        System.out.println(arr == arr4);

        System.out.println(arr4[0]);

    }
}
